#if !defined(PARSE_STRAIN_GENOTYPE_H)
#define PARSE_STRAIN_GENOTYPE_H

#include <string>
#include <vector>
#include <boost/shared_ptr.hpp>
#include <boost/spirit/include/classic_position_iterator.hpp>
#include <boost/spirit/include/support_multi_pass.hpp>
#include <boost/spirit/include/support_look_ahead.hpp>



struct t_strain_genotype
{
    std::string                 chromosome;
    unsigned                    pos;
    char						ref;
	char						genotype1;
	char						genotype2;
	std::string					other_fields;
};

struct t_strain_genotype_ex
{
    std::string                 chromosome;
    unsigned                    pos;
    char						ref;
	char						genotype1;
	char						genotype2;
	int							hcg;
	int		                    mapping_quality;
	int		                    genotype_quality;
};

template <typename Iterator>
struct strain_genotype_grammar;
typedef boost::shared_ptr<strain_genotype_grammar<std::string::const_iterator> > sp_strain_genotype_grammar ;
sp_strain_genotype_grammar create_strain_genotype_grammar(unsigned& curr_line_number);
bool parse_strain_genotype(sp_strain_genotype_grammar p_strain_genotype_grammar, std::string::const_iterator& beg, std::string::const_iterator end, t_strain_genotype& res);


template <typename Iterator>
struct strain_genotype_ex_grammar;
typedef boost::shared_ptr<strain_genotype_ex_grammar<std::string::const_iterator> > sp_strain_genotype_ex_grammar ;
sp_strain_genotype_ex_grammar create_strain_genotype_ex_grammar(unsigned& curr_line_number);
bool parse_strain_genotype_ex(sp_strain_genotype_ex_grammar p_strain_genotype_ex_grammar, std::string::const_iterator& beg, std::string::const_iterator end, t_strain_genotype_ex& res);


#endif	// PARSE_STRAIN_GENOTYPE_H
